﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using AdmLaboratorios.DTO;
using System.Data;

namespace AdmLaboratorios.DAO
{
    public class ProductoDAO : DAOBase<ProductoDTO>
    {
//        public DataTable GetByPartner(int partnerId)
//        {
//            DataTable dt = new DataTable();

//            string qry = @"SELECT *
//                            FROM Producto
//                            JOIN PartnerProducto
//                                ON Producto.Id = PartnerProducto.IdProducto
//                            AND PartnerProducto.IdPartner = {0}";

//            qry = string.Format(qry, partnerId);

//            DAOHelper.LlenarDataTable(ref dt, qry);

//            return dt;
//        }

        public DataTable GetByPartner(int partnerId, bool filtraPorPartener, string filtro)
        {
            string qry;
            DataTable dt = new DataTable();

            if (filtraPorPartener)
            {
                qry = @"SELECT Producto.*
                            FROM Producto
                            JOIN PartnerProducto
                                ON Producto.Id = PartnerProducto.IdProducto
                            AND PartnerProducto.IdPartner = {0} AND Producto.Activo=1";

            }
            else
            {
                qry = "SELECT Producto.* FROM Producto WHERE Activo=1";
            }

            if (filtro.Trim() != string.Empty)
            {
                filtro = filtro.Replace("%", "_").Replace("'", "_");

                qry += string.Format(" AND (Producto.Nombre LIKE '%{0}%' OR Producto.NombreComercial LIKE '%{0}%' OR CodigoBarrasInterno LIKE '%{0}%' OR CodigoBarrasExterno LIKE '%{0}%' OR Codigo LIKE '%{0}%')",
                    filtro);
            }

            qry = string.Format(qry, partnerId);

            DAOHelper.LlenarDataTable(ref dt, qry);

            return dt;
        }

        public DataTable GetByPartnerTerminados(int partnerId, bool filtraPorPartener, string filtro)
        {
            string qry;
            DataTable dt = new DataTable();

            if (filtraPorPartener)
            {
                qry = @"SELECT Producto.*
                            FROM Producto
                            JOIN PartnerProducto ON Producto.Id = PartnerProducto.IdProducto
                            WHERE PartnerProducto.IdPartner = {0} AND Tipo IN ('PRODUCTO_TERMINADO', 'SEMI_ELABORADO') AND Producto.Activo=1";

            }
            else
            {
                qry = "SELECT Producto.* FROM Producto WHERE Tipo IN ('PRODUCTO_TERMINADO', 'SEMI_ELABORADO') AND Activo=1";
            }

            if (filtro.Trim() != string.Empty)
            {
                filtro = filtro.Replace("%", "_").Replace("'", "_");

                qry += string.Format(" AND (Producto.Nombre LIKE '%{0}%' OR Producto.NombreComercial LIKE '%{0}%' OR CodigoBarrasInterno LIKE '%{0}%' OR CodigoBarrasExterno LIKE '%{0}%' OR Codigo LIKE '%{0}%')",
                    filtro);
            }

            qry = string.Format(qry, partnerId);

            DAOHelper.LlenarDataTable(ref dt, qry);

            return dt;
        }


        public DataTable Consulta(string filtro)
        {
            string qry;
            DataTable dt = new DataTable();

            qry = @"SELECT * FROM Producto WHERE Producto.Activo=1";

            if (filtro.Trim() != string.Empty)
            {
                filtro = filtro.Replace("%", "_").Replace("'", "_");

                qry += string.Format(" AND (Nombre LIKE '%{0}%' OR NombreComercial LIKE '%{0}%' OR CodigoBarrasInterno LIKE '%{0}%' OR CodigoBarrasExterno LIKE '%{0}%' OR Codigo LIKE '%{0}%')",
                    filtro);
            }

            DAOHelper.LlenarDataTable(ref dt, qry);

            return dt;
        }

        public string[] GetNombres()
        {
            List<string> valores = new List<string>();
            DataTable dt = new DataTable();
            DAOHelper.LlenarDataTable(ref dt, "SELECT DISTINCT Nombre FROM [Producto] ORDER BY Nombre");

            foreach (DataRow dr in dt.Rows)
                valores.Add(Convert.ToString(dr[0]));
                
            return valores.ToArray();
        }

        public string[] GetNombresComerciales()
        {
            List<string> valores = new List<string>();
            DataTable dt = new DataTable();
            DAOHelper.LlenarDataTable(ref dt, "SELECT DISTINCT NombreComercial FROM [Producto] ORDER BY NombreComercial");

            foreach (DataRow dr in dt.Rows)
                valores.Add(Convert.ToString(dr[0]));
                
            return valores.ToArray();
        }

        public string[] GetUnidadesMedida()
        {
            List<string> valores = new List<string>();
            DataTable dt = new DataTable();
            DAOHelper.LlenarDataTable(ref dt, "SELECT DISTINCT UnidadMedida FROM [Producto] ORDER BY UnidadMedida");

            foreach (DataRow dr in dt.Rows)
                valores.Add(Convert.ToString(dr[0]));

            return valores.ToArray();
        }

        //public DataTable GetByPartnerTerminados(int p, bool filtraPorPartener, string filtro)
        //{
        //    throw new NotImplementedException();
        //}
    }
}
